为什么enum的大小总是2或4字节(分别在16位或32位体系结构上),而不管类型中的枚举数是多少?编译器是否像对待union一样对待enum? 最佳答案 在C和C++中,enum类型的大小是实现定义的,并且与某些整数类型的大小相同。一种常见的方法是使所有enum类型的大小与int相同,因为这通常是最有效访问的类型。例如,将其设为单个字节会节省非常少量的空间,但可能需要更大且更慢的代码才能访问它,具体取决于CPU架构。在C中,枚举constants由int类型定义。所以给定:enumfoo{zero,one,two};enumfooo
为什么enum的大小总是2或4字节(分别在16位或32位体系结构上),而不管类型中的枚举数是多少?编译器是否像对待union一样对待enum? 最佳答案 在C和C++中,enum类型的大小是实现定义的,并且与某些整数类型的大小相同。一种常见的方法是使所有enum类型的大小与int相同,因为这通常是最有效访问的类型。例如,将其设为单个字节会节省非常少量的空间,但可能需要更大且更慢的代码才能访问它,具体取决于CPU架构。在C中,枚举constants由int类型定义。所以给定:enumfoo{zero,one,two};enumfooo
看这个问题:WhydoesaC/C++compilerneedknowthesizeofanarrayatcompiletime?我突然想到,编译器实现者现在应该有一些时间来涉足(这是10年前的C99标准的一部分)并提供高效的实现。但是,它似乎(从答案中)仍然被认为是昂贵的。这让我有些吃惊。当然,我知道静态偏移在性能方面比动态偏移要好得多,并且与一个建议不同,我实际上不会让编译器执行数组的堆分配,因为这可能会花费更多[这还没有被测量;)]但我仍然对假定的成本感到惊讶:据我所知,如果函数中没有VLA,那么就不会产生任何成本。如果只有一个VLA,那么可以将它放在所有变量之前或之后,因此可以
看这个问题:WhydoesaC/C++compilerneedknowthesizeofanarrayatcompiletime?我突然想到,编译器实现者现在应该有一些时间来涉足(这是10年前的C99标准的一部分)并提供高效的实现。但是,它似乎(从答案中)仍然被认为是昂贵的。这让我有些吃惊。当然,我知道静态偏移在性能方面比动态偏移要好得多,并且与一个建议不同,我实际上不会让编译器执行数组的堆分配,因为这可能会花费更多[这还没有被测量;)]但我仍然对假定的成本感到惊讶:据我所知,如果函数中没有VLA,那么就不会产生任何成本。如果只有一个VLA,那么可以将它放在所有变量之前或之后,因此可以
以下代码被clang6.0.0接受但被gcc8.2拒绝enumclassE{Good,Bad,};structS{Ee:2;intdummy;};Sf(){return{E::Good,100};}LivegodboltexampleGCC提示error:couldnotconvert'{Good,100}'from''to'S'哪一个是正确的?标准中哪里谈到了这种情况? 最佳答案 return{E::Good,100};执行copylistinitialization的返回值。此列表初始化的效果是aggregateinitiali
以下代码被clang6.0.0接受但被gcc8.2拒绝enumclassE{Good,Bad,};structS{Ee:2;intdummy;};Sf(){return{E::Good,100};}LivegodboltexampleGCC提示error:couldnotconvert'{Good,100}'from''to'S'哪一个是正确的?标准中哪里谈到了这种情况? 最佳答案 return{E::Good,100};执行copylistinitialization的返回值。此列表初始化的效果是aggregateinitiali
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。如果枚举只在类成员函数中使用,你应该在类内部还是外部声明枚举?namespacenspace{//needtoappendOC,asthispollutesthecurrentnamespaceenumOUTSIDE_CLASS{OC_POINTS,OC_LINES,OC_LINE_LOOP,:::};enumOTHER_ENUM{OE_POINTS
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。如果枚举只在类成员函数中使用,你应该在类内部还是外部声明枚举?namespacenspace{//needtoappendOC,asthispollutesthecurrentnamespaceenumOUTSIDE_CLASS{OC_POINTS,OC_LINES,OC_LINE_LOOP,:::};enumOTHER_ENUM{OE_POINTS
如果我将整数转换为枚举类,但枚举中不存在该值会怎样?例如:我想要一个函数来测试一个整数是否具有来自枚举类的某个值:enumclassEnumClass{A,B=4,C=9,D=60};boolcheckEnumClass(intv){switch(static_cast(v)){caseEnumClass::A:caseEnumClass::B:caseEnumClass::C:caseEnumClass::D:returntrue;default:returnfalse;}}checkEnumClass(0)==true;checkEnumClass(7)==false;//isth
如果我将整数转换为枚举类,但枚举中不存在该值会怎样?例如:我想要一个函数来测试一个整数是否具有来自枚举类的某个值:enumclassEnumClass{A,B=4,C=9,D=60};boolcheckEnumClass(intv){switch(static_cast(v)){caseEnumClass::A:caseEnumClass::B:caseEnumClass::C:caseEnumClass::D:returntrue;default:returnfalse;}}checkEnumClass(0)==true;checkEnumClass(7)==false;//isth